package com.fr.report.script.function;

import com.fr.base.core.DateUtils;
import com.fr.report.script.Function;
import com.fr.report.script.Function.Type;
import com.fr.report.script.NormalFunction;
import com.fr.report.script.Primitive;
import com.fr.util.Utils;

public class DATE extends NormalFunction
{
  public Object run(Object[] paramArrayOfObject)
  {
    if (paramArrayOfObject.length < 3)
      return Primitive.ERROR_NAME;
    return DateUtils.createDate(Utils.objectToNumber(paramArrayOfObject[0], false).intValue(), Utils.objectToNumber(paramArrayOfObject[1], false).intValue(), Utils.objectToNumber(paramArrayOfObject[2], false).intValue());
  }

  public Function.Type getType()
  {
    return Function.DATETIME;
  }

  public String getCN()
  {
    return "DATE(year,month,day): 返回一个表示某一特定日期的系列数。\nYear:代表年，可为一到四位数。\nMonth:代表月份。\n若1 month 12，则函数把参数值作为月。\n若month>12，则函数从年的一月份开始往上累加。例如: DATE(2000,25,2)等于2002年1月2日的系列数。\nDay:代表日。\n若日期小于等于某指定月的天数，则函数将此参数值作为日。\n若日期大于某指定月的天数，则函数从指定月份的第一天开始往上累加。若日期大于两个或多个月的总天数，则函数把减去两个月或多个月的余数加到第三或第四个月上，依此类推。例如:DATE(2000,3,35)等于2000年4月4日的系列数。\n备注:\n   若需要处理公式中日期的一部分，如年或月等，则可用此公式。\n   若年，月和日是函数而不是函数中的常量，则此公式最能体现其作用。\n示例:\nDATE(1978, 9, 19) 等于1978年9月19日.\nDATE(1211, 12, 1) 等于1211年12月1日.   ";
  }

  public String getEN()
  {
    return "DATE(year,month,day): Returns the sequential serial number that represents a particular date. \nYear  The year argument can be one to four digits.\nMonth is a number representing the month of the year. If 1 < Month < 12, it represents the month.\nIf month > 12, month adds that number of months to the first month in the year specified. For example, DATE(2000,25,2) returns the serial number representing DATE(2002,1,2).\nDay: is a number representing the day of the month. If 1 < Day < 12, it represents the day.\nIf day is greater than the number of days in the month specified, day adds that number of days to the first day in the month. For example, DATE(2000,3,35) returns the serial number representing April 4, 2000.\n\nRemarks:\n   The DATE function is most useful in formulas where year, month, and day are formulas, not constants.\n\nExample:\n   DATE(1978, 9, 19) = September 19, 1978\n   DATE(1211, 12, 1) = December 1, 1211  ";
  }
}